package a18_SimplePracticeAll;

import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
import java.util.Random;

/**
 * @Author quan
 * @Description 抢红包
 * 分别有{2,588,888,1000,10000}5个奖金，请用代码模拟抽奖，
 * 打印出每个奖项，奖项的出现顺序要随机且不被重复。打印效果如下：
 * (顺序随机)：
 * 888的奖金被抽出
 * 588的奖金被抽出
 * ...2元的奖金被抽出
 * @Date 2023/2/2 23:08
 */
//没写好
//让生成的索引数是随机的容易实现，关键是怎么让生成的索引值不重复呢？
public class A6_GrabRedEnvelope {
    public static void main(String[] args) {
        //定义一个数组存储红包金额
        int[] arr = {2,588,888,1000,10000};
        int[] newArr = new int[arr.length];
        //按随机索引取出数组中的数字
        Random r = new Random();
        for (int i = 0; i < arr.length;) {
            //定义一个红包的随机索引，在0-4之间
            int randomIndex = r.nextInt(arr.length);
            int money = arr[randomIndex];
            //-----------关键：重复值的判断----------
            //判断生成的奖项money是否存在于新数组中，输出一个布尔类型值
            boolean flag = contains(newArr, money);
            if(!flag){//money不存在于新数组中——>有效奖项——>将money存到newArr中
                newArr[i] = money;
                //--------------注意点---------
                i++;
            }
//            else{//money存在于新数组中:重新循环，此时已经浪费了一次机会，因此i值要-1
//                i = i-1;
//            }//或者不写else，需要将25行的i++移动到34行后：表示有效奖项时，i值才变化，否则i值不变化
        }
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }
    }

    public static boolean contains(int[] arr, int num){
        //将数组中的每一个元素都和生成的随机索引值比较，看是否包含
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==num){
                return true;
            }
        }
        return false;
    }

}

